package com.ssy.lingxi.contract.service;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.contract.api.model.vo.request.ContrPriceQueryRequest;
import com.ssy.lingxi.contract.api.model.vo.request.ContractPageRequest;
import com.ssy.lingxi.contract.api.model.vo.response.ContractPageResponse;
import com.ssy.lingxi.contract.api.model.vo.response.ContractPriceQueryVO;
import com.ssy.lingxi.contract.model.vo.common.response.PageItemVO;
import com.ssy.lingxi.contract.model.vo.coordination.request.AssociatedGoodsUpdateVO;
import com.ssy.lingxi.contract.model.vo.coordination.request.ContractCoordinationCommonPageVO;
import com.ssy.lingxi.contract.model.vo.coordination.request.ContractCoordinationExamineVO;
import com.ssy.lingxi.contract.model.vo.coordination.request.ContractCoordinationPageVO;
import com.ssy.lingxi.contract.model.vo.coordination.response.ContractCoordinationDetailVO;
import com.ssy.lingxi.contract.model.vo.coordination.response.ContractCoordinationQueryVO;

import java.util.List;

/**
 * 合同协作接口定义
 * @author 伍将
 * @date 2021/2/3
 * @version 2.0.0
 */
public interface IContractCoordinationService {

    /**
     * 分页查询合同列表
     * @author 伍将
     * @date 2021/2/3
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ContractCoordinationQueryVO>> pageList(UserLoginCacheDTO user, ContractCoordinationPageVO pageVO);

    /**
     * 查询合同详情
     * @author 伍将
     * @date 2021/2/8
     * @param user: 当前登录用户
     * @param contractId: 合同id
     * @return 操作结果
     **/
    Wrapper<ContractCoordinationDetailVO> getDetail(UserLoginCacheDTO user, Long contractId);

    /**
     * 分页查询待提交审核合同列表
     * @author 伍将
     * @date 2021/2/3
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ContractCoordinationQueryVO>> pageToBeSubmitExamine(UserLoginCacheDTO user, ContractCoordinationCommonPageVO pageVO);

    /**
     * 关联报价商品
     * @author 伍将
     * @date 2021/3/2
     * @param user: 当前登录用户
     * @param updateVO: 更新参数
     * @return 操作结果
     **/
    Wrapper<Void> associatedOfferGoods(UserLoginCacheDTO user, AssociatedGoodsUpdateVO updateVO);

    /**
     * 提交审核
     * @author 伍将
     * @date 2021/2/8
     * @param user:当前登录用户
     * @param examineVO:审核请求参数
     * @return 操作结果
     **/
    Wrapper<Void> submitExamine(UserLoginCacheDTO user, ContractCoordinationExamineVO examineVO);

    /**
     * 分页查询待审核一级合同列表
     * @author 伍将
     * @date 2021/2/3
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ContractCoordinationQueryVO>> pageToBeExamineOne(UserLoginCacheDTO user, ContractCoordinationCommonPageVO pageVO);

    /**
     * 一级审核
     * @author 伍将
     * @date 2021/2/8
     * @param user:当前登录用户
     * @param examineVO:审核请求参数
     * @return 操作结果
     **/
    Wrapper<Void> examineStepOne(UserLoginCacheDTO user, ContractCoordinationExamineVO examineVO);

    /**
     * 分页查询待审核二级合同列表
     * @author 伍将
     * @date 2021/2/3
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ContractCoordinationQueryVO>> pageToBeExamineTwo(UserLoginCacheDTO user, ContractCoordinationCommonPageVO pageVO);

    /**
     * 二级级审核
     * @author 伍将
     * @date 2021/2/8
     * @param user:当前登录用户
     * @param examineVO:审核请求参数
     * @return 操作结果
     **/
    Wrapper<Void> examineStepTwo(UserLoginCacheDTO user, ContractCoordinationExamineVO examineVO);

    /**
     * 分页查询待签订合同列表
     * @author 伍将
     * @date 2021/2/3
     * @param user: 当前登录用户
     * @param pageVO: 分页请求参数
     * @return 操作结果
     **/
    Wrapper<PageData<ContractCoordinationQueryVO>> pageToBeSign(UserLoginCacheDTO user, ContractCoordinationCommonPageVO pageVO);

    /**
     * 签订合同
     * @author 伍将
     * @date 2021/2/8
     * @param user: 当前登录用户
     * @param examineVO: 审核请求参数
     * @return 操作结果
     **/
    Wrapper<Void> sign(UserLoginCacheDTO user, ContractCoordinationExamineVO examineVO);

    /**
     * 获取外部状态列表
     * @author 伍将
     * @date 2021/2/3
     * @return 操作结果
     **/
    Wrapper<List<PageItemVO>> getOuterStatusList();

    /**
     * 获取内部状态列表
     * @author 伍将
     * @date 2021/2/3
     * @return 操作结果
     **/
    Wrapper<List<PageItemVO>> getInnerStatusList();

    /**
     * 查询合同列表-合同请款（按物料税率分组）
     * @param requestVO
     * @return
     */
    Wrapper<PageData<ContractPageResponse>> pageContractByApplyAmount(ContractPageRequest requestVO);

    /**
     * 根据物料信息查询合同(商品能力- 物料价格库)
     * @author lxc
     * @date 2022/3/28
     **/
    Wrapper<ContractPriceQueryVO> goodsPriceByGoods(ContrPriceQueryRequest request);
}

